/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 苏李涛
 * Date: 2024-08-27
 * Time: 16:30
 */

/**
 * 最大连续1的个数 III:
 *
 * 给定一个二进制数组 nums 和一个整数 k，如果可以翻转最多 k 个 0 ，则返回 数组中连续 1 的最大个数 。
 *
 *
 *
 * 示例 1：
 *
 * 输入：nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2
 * 输出：6
 * 解释：[1,1,1,0,0,1,1,1,1,1,1]
 * 粗体数字从 0 翻转到 1，最长的子数组长度为 6。
 * 示例 2：
 *
 * 输入：nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
 * 输出：10
 * 解释：[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
 * 粗体数字从 0 翻转到 1，最长的子数组长度为 10
 */
public class MaxNumOne {
    public int longestOnes(int[] nums, int k) {
        int left = 0;
        int right = 0;
        int zero = 0;//计数器
        int ret = 0;



        while(right < nums.length){
            //进窗口
            if(nums[right] == 0){
                zero++;
            }

            //判断出窗口
            while(zero > k) {
                if(nums[left++] == 0){
                    zero--;//出窗口
                }
            }
            ret = Math.max(ret,right-left+1);//更新结果

            right++;

        }


        return ret;
    }
}
